<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // promise 周边方法：
        // 一、promise的实例方法 二、promise 的静态方法
        // 一、promise 里的实例方法
        // 1.catch : 捕捉promise 链上的错误;
        // let p = new Promise((resolve,reject)=>{
        //     // resolve(111);
        //     reject(222);
        // })

        // p.then(res=>{
        //     console.log(res);
        // }).catch(err=>{
        //     console.log(err);
        // })


        // 多个promise 对象 执行
        function fn1(){
            return new Promise((resolve , reject)=>{
                setTimeout(() => {
                    resolve(111);
                    // reject('错误');
                }, 1000);
            })
        }

        function fn2(){
            return new Promise((resolve , reject)=>{
                setTimeout(() => {
                    // resolve(222);
                    reject('错误');
                }, 1000);
            })
        }

        function fn3(){
            return new Promise((resolve , reject)=>{
                setTimeout(() => {
                    resolve(333);
                    // reject('错误');
                }, 1000);
            })
        }


        fn1().then(res=>{
            console.log(res);
            return fn2();
        }).then(res=>{
            return fn3();
        }).then(res=>{
            console.log(res);
        }).catch(err=>{
            console.log('catch',err);
        })




        // async function fn(){
        //     try{
        //         await fn();
        //     }catch(err){console.log('??',err);}

        //     //错误写法
        //     // try{
        //     // 
        //     //}catch(err=>{
        //     //    console.log(err);
        //     //})  
        //     //   
        // }
        // fn();



        //2.finally : 无论成功或者失败都会最后执行。promise 执行完了之后调用

        fn1().finally(()=>{
            console.log('执行完了');
        })
        // fn2().finally(()=>{
        //     console.log('执行完了');
        // })
        // fn3().finally(()=>{
        //     console.log('执行完了');
        // })

        setTimeout(() => {
            console.log(123);
        });
    </script>
</body>
</html>